﻿using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using Mx.Ipn.Escom.TT20080015.Modelo.Codificacion;
using Mx.Ipn.Escom.TT20080015.Modelo.Datos;
using Mx.Ipn.Escom.TT20080015.Modelo.DB;
using Mx.Ipn.Escom.TT20080015.Modelo.Memoria;

namespace Mx.Ipn.Escom.TT20080015.Vistas.Datos
{
    public partial class CasoEstudioView : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["user"] == null)
                Server.Transfer("~/Default.aspx", false);

            if (Context.Items["paciente"] != null)
            {
                Paciente p = (Paciente)Context.Items["paciente"];
                idPacienteHiddenField.Value = p.Id.ToString();
                tbNombre.Text = p.Nombre;
                tbAPaterno.Text = p.APaterno;
                tbAMaterno.Text = p.AMaterno;
                tbFechaNac.Text = p.FechaNacimiento.ToString("dd/MM/yyyy");

                Estudio est = CasoEstudioManager.Consultar(p.Id);
                string diag = est.Diagnostico.ToString("dd/MM/yyyy");
                string rec = est.RecurrenciaCancer.ToString("dd/MM/yyyy");
                libreCancerTextBox.Text = (diag.Equals("01/01/1000")) ? "" : diag;
                lClass.SelectedIndex = (int)est.Recurrencia;
                lAge.SelectedIndex = (int)est.Age;
                lMenopause.SelectedIndex = (int)est.Menopause;
                lTumorSize.SelectedIndex = (int)est.TumorSize;
                lInvNodes.SelectedIndex = (int)est.InvNodes;
                lNodeCaps.SelectedIndex = (int)est.NodeCaps;
                lDegMalig.SelectedIndex = (int)est.DegMalig;
                lBreast.SelectedIndex = (int)est.Breast;
                lBreastQuad.SelectedIndex = (int)est.Breast;
                lIrradiat.SelectedIndex = (int)est.Irradiat;
                tbRecurrencia.Text = (rec.Equals("01/01/1000")) ? "" : rec;
            }
            else
            {
                datosPaciente.Visible = false;
                recurrenciaPanel.Visible = false;
            }
        }

        /// <summary>
        /// El método obtiene los valores de los DropDownList y los almacena el el arreglo parametros.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnClasificar_Click(object sender, EventArgs e)
        {
            Parametro p = new Parametro();
            BAMAlphaBeta m = new BAMAlphaBeta();
            
            BinaryFormatter bformatter = new BinaryFormatter();
            //AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
            Stream s = File.Open("c:\\test.kb", FileMode.Open);
            m = (BAMAlphaBeta)bformatter.Deserialize(s);
            s.Close();
            string[] parametros = {"0",
                                    lAge.SelectedValue,
                                    lMenopause.SelectedValue,
                                    lTumorSize.SelectedValue,
                                    lInvNodes.SelectedValue,
                                    lNodeCaps.SelectedValue,
                                    lDegMalig.SelectedValue,
                                    lBreast.SelectedValue,
                                    lBreastQuad.SelectedValue,
                                    lIrradiat.SelectedValue
                                  };
            int a = m.Output(p.obtenerTrama(parametros))[0];
            Context.Items.Add("value",a.ToString());
            int id = Convert.ToInt32(idPacienteHiddenField.Value);
            Estudio c = new Estudio(id, parametros, new DateTime().ToString("yyyy/MM/dd"),
                                    new DateTime().ToString("yyyy/MM/dd"));
            if (!idPacienteHiddenField.Value.Equals("0"))
            {
                try
                {
                    CasoEstudioManager.Actualizar(c);
                    Context.Items.Add("paciente", ObtenerPaciente());
                }
                catch(Exception ex)
                {
                    Context.Items.Add("msg", ex.Message);
                    CasoEstudioManager.Actualizar(c);
                }
            }
            Context.Items.Add("estudio", c);
            Server.Transfer("../../vistas/paciente/Clasificacion.aspx");
        }

        /// <summary>
        /// Este método obtiene los datos capturados en el formulario de registro de un nuevo paciente.
        /// </summary>
        /// <returns>Un objeto Paciente</returns>
        protected Paciente ObtenerPaciente()
        {
            return new Paciente(Convert.ToInt32(idPacienteHiddenField.Value), tbNombre.Text,
                    tbAPaterno.Text, tbAMaterno.Text, tbFechaNac.Text);
        }
    }
}
